package modelo;

public class TarifaResConSubsidio extends Residencial implements Comparable<TarifaResConSubsidio>{

	private Integer topeSubsidio;
	private static SistemaContable sc;
	private float valorSubsidio;
	
	public TarifaResConSubsidio(Factura f, int topeSubsidio, String descripcion, float valor, float contribucionMunicipal, float iva, float valorSubsidio, boolean estado){
		super(f, descripcion, valor, contribucionMunicipal, iva, estado);
		this.topeSubsidio=topeSubsidio;
		this.valorSubsidio=1-(valorSubsidio/100);
	}
	
	public Factura liquidarTarifa(Usuario ur){
		if (this.f==null)
		{
			float ultmedicion=ur.getUltMedicion();
			float subtotal=ultmedicion*this.getValorTarifa();
			if(subtotal<this.getTopeSubsidio()){
				f = new Factura(ur);
				f.setMedicionActual(ultmedicion);
				f.addItem(new ItemFactura("Tarifa Res Con Sub", subtotal, f.getNroFac()));
				f.setImporte(subtotal);
				float totaliva=subtotal*this.getIva()-subtotal;
				f.addItem(new ItemFactura("IVA", totaliva, f.getNroFac()));
				float contribucion=subtotal*((this.getContribucionMunicipal()/100)+1)-subtotal;
				f.addItem(new ItemFactura("Contribucion Municipal", contribucion, f.getNroFac()));
				float tempsubsidio=f.getImporte()*this.getValorSubsidio();
				f.addItem(new ItemFactura(this.getDescripcion(), tempsubsidio-f.getImporte(), f.getNroFac()));
				f.setImporte(tempsubsidio+totaliva+contribucion);
				sc.getInstanciaObserver().cargarDescuentosPorSubsidios(tempsubsidio);
			}
			return f;
		}
		return null;
	}

	public Integer getTopeSubsidio() {
		return topeSubsidio;
	}

	public void setTopeSubsidio(int topeSubsidio) {
		this.topeSubsidio = topeSubsidio;
	}
	

	public int compareTo(TarifaResConSubsidio trcs){
		int result=this.getTopeSubsidio().compareTo(trcs.getTopeSubsidio());
		return result;
	}

	public float getValorSubsidio() {
		return valorSubsidio;
	}

	public void setValorSubsidio(float valorSubsidio) {
		this.valorSubsidio = valorSubsidio;
	}
	
}

